package net.oschina.gitapp.widget;

import java.util.List;
import net.oschina.gitapp.R;
import net.oschina.gitapp.bean.MoreMenuItem;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;

/**
 * 弹出菜单 说明：所有的的DropDownMenu的根的ID都需要时set_up(用于设置在menu外点击关闭)
 * 
 * @created 2014-08-01
 * @author 火蚁(http://my.oschina.net/LittleDY)
 * 
 */
public class DropDownMenu extends PopupWindow {
    
    private ViewGroup menuView;
    
    private OnClickListener itemClickListener;
    
    private LayoutInflater inflater;
    
    public DropDownMenu(final Activity context,
            OnClickListener itemClickListener) {
        super(context);
        this.itemClickListener = itemClickListener;
        this.inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        menuView = (ViewGroup) inflater.inflate(R.layout.more_menu_container,
                null);
        this.setContentView(menuView);
        this.setWidth(LayoutParams.WRAP_CONTENT);
        this.setHeight(LayoutParams.WRAP_CONTENT);
        this.setFocusable(true);
        ColorDrawable dw = new ColorDrawable(0000000000);
        this.getContentView().setPadding(0, 0, 25, 0);
        this.setBackgroundDrawable(dw);
        menuView.setOnTouchListener(new OnTouchListener() {
            
            public boolean onTouch(View v, MotionEvent event) {
                // 所有的的DropDownMenu的根的ID都需要时set_up
                int height = menuView.findViewById(R.id.set_pop).getTop();
                int y = (int) event.getY();
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    if (y < height) {
                        dismiss();
                    }
                }
                return true;
            }
        });
    }
    
    public ViewGroup getViewGroup() {
        return this.menuView;
    }
    
    // 添加菜单项
    private void addItem(MoreMenuItem moreMenuItem, boolean isAddLine) {
        View item = inflater.inflate(R.layout.more_menu_item, null);
        item.setId(moreMenuItem.getViewId());
        ((ImageView) item.findViewById(R.id.more_menu_item_img))
                .setBackgroundResource(moreMenuItem.getImgId());
        ((TextView) item.findViewById(R.id.more_menu_item_text))
                .setText(moreMenuItem.getText());
        item.setOnClickListener(itemClickListener);
        menuView.addView(item);
        if (isAddLine) {
            View line = inflater
                    .inflate(R.layout.horizontal_divider_view, null);
            menuView.addView(line);
        }
    }
    
    public void addItems(List<MoreMenuItem> mMoreItems) {
        for (int i = 0; i < mMoreItems.size(); i++) {
            if (this != null) {
                if (i != mMoreItems.size() - 1) {
                    this.addItem(mMoreItems.get(i), true);
                }
                else {
                    this.addItem(mMoreItems.get(i), false);
                }
            }
        }
    }
}
